package com.yu.proxy.dynamic;

import com.yu.proxy.Calculator;
import com.yu.proxy.CalculatorImpl;

/**
 * @author yushijun
 * @date 2018/6/29
 * 代理使用
 *1.JDK动态代理只能代理有接口的类,并且是能代理接口方法,不能代理一般的类中的方法
 *2.提供了一个使用InvocationHandler作为参数的构造方法。在代理类中做一层包装,业务逻辑在invoke方法中实现
 *3.重写了Object类的equals、hashCode、toString，它们都只是简单的调用了InvocationHandler的invoke方法，即可以对其进行特殊的操作，也就是说JDK的动态代理还可以代理上述三个方法
 *4.在invoke方法中我们甚至可以不用Method.invoke方法调用实现类就返回。这种方式常常用在RPC框架中,在invoke方法中发起通信调用远端的接口等
 */
public class JdkDynamicCalculator {

    public static void main(String[] args) {
        Calculator proxy =(Calculator) new ProxyFactory(Calculator.class).bind(new CalculatorImpl());
        proxy.add(1,2);
    }

}
